/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package adbus.models;

import adbus.libraries.Database;
import adbus.libraries.ORM;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *gluwna klasa Reklama
 * @author rafal
 */
public class Reklama extends ORM{
    /**zmienna przechowujaca liste formatow*/
    private LinkedList<Format> formats = new LinkedList<Format>();
    private Pojazd vehicle;

    @Override
     /**metoda wzracająca wszystkie dane z tabeli Reklamy*/
    public String basicQuery() {
        return "SELECT * FROM Reklamy r JOIN Pojazdy p ON p.id_pojazd = r.id_pojazdu";
    }
    /**metoda pobierająca reklamy i dodająca je do listy*/
    public LinkedList<Reklama> pobierz() {
        LinkedList<Reklama> reklamy = new LinkedList<Reklama>();
        try {

            ResultSet krs = Database.querySelect(basicQuery() + getWhere(), filtersval);
            while (krs.next()) {
                Reklama k = new Reklama();
                k.zaladuj(krs);
                //System.out.println(k.nazwa);
                reklamy.add(k);
            }
        } catch (SQLException ex) {
            Logger.getLogger(Klient.class.getName()).log(Level.SEVERE, null, ex);
        }
        return reklamy;
    }
    /**metoda przypisujaca formaty*/
    public void przypiszFormaty(Object[] f) {
        for(Object o: f) {
            formats.add((Format) o);
        }
    }
    /**metoda przypisujaca pojazd*/
    public void przypiszPojazd(Pojazd v) {
        vehicle = v;
    }
    @Override
    /**metoda zwracajac stringa*/
    public String toString() {
        String r = "";
        r+=vehicle.nr_pojazdu+": ";
        for(Format f: formats) {
            r+=f.nazwa+"; ";
        }
        return r;
    }
    /**metoda zapisująca nowa reklame do tabeli Reklamy*/
    public void zapisz() {
        if(id_reklama==null) {
            String q ="INSERT INTO Reklamy(id_reklama,id_pojazdu,id_kampania) VALUES(NULL,?,?);";
            LinkedHashMap<String,Object> hm = new LinkedHashMap<String, Object>();
            hm.put("1", vehicle.id_pojazdu);
            hm.put("2", id_kampania);
            ResultSet res = super.zapisz(q, "id_reklama", hm);
            try {
                id_reklama = res.getInt(1);
            } catch (SQLException ex) {
                Logger.getLogger(Reklama.class.getName()).log(Level.SEVERE, null, ex);
            }
            for(Format f: formats) {
                String qf ="INSERT INTO Reklama_Format(id_reklama,id_Format) VALUES(?,?);";
                LinkedHashMap<String,Object> hmf = new LinkedHashMap<String, Object>();
                hmf.put("1", id_reklama);
                hmf.put("2", f.id_Format);
                super.zapisz(qf, "id_reklama", hmf);
            }
        }
    }
    /**zmienna przechowujaca id_reklamy*/
    public Integer id_reklama;
    /**zmienna przechowujaca id_kampanii*/
    public Integer id_kampania;
/**metoda wstawiająca dane z tabeli Reklamy do odpowiednich zmiennych*/
    private void zaladuj(ResultSet set) {
        try {
            if (set.isBeforeFirst()) {
                set.first();
            }

            id_reklama = set.getInt("id_reklama");
            id_kampania = set.getInt("id_kampania");
            vehicle = new Pojazd();
            vehicle.pobierzWgId(set.getInt("id_pojazd"));
            Format tmp = new Format();
            tmp.setAdvertFilter(id_reklama);
            formats = tmp.pobierz();
        } catch (SQLException ex) {
            Logger.getLogger(Reklama.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
/**metoda filtrująca formaty wg id kampani*/
    void setCampaignFilter(Integer id_kampania) {
        filters.put("kamp", "id_kampania = ?");
        filtersval.put("kamp",id_kampania);
    }
/**metoda usuwajaca dane z tabeli Reklamy*/
    void usun() {
        try {
            Database.queryUpdate("DELETE FROM Reklamy WHERE id_reklama = " + id_reklama, "id_reklama");
        } catch (SQLException ex) {
            Logger.getLogger(Reklama.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
